/*
 * PedidoAssociado.java
 *
 * Created on 12/03/2009, 13:54:53
 * Copyright Jaime Junior
 * Elizabete Yanase Hirabara Bento
 */
package Adecot.Pedidos;

import com.icesoft.faces.component.ext.*;
import com.icesoft.faces.component.jsfcl.data.*;
import com.icesoft.faces.component.panellayout.PanelLayout;
import com.icesoft.faces.component.panelpopup.PanelPopup;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import javax.faces.FacesException;
import Adecot.RequestBean1;
import Adecot.ApplicationBean1;
import Adecot.SessionBean1;
import Controller.*;
import Controller.Facade.IceDecorator;
import Model.BD.DAO;
import Model.ItemPedidoAssociado;
import Model.ItemPedidoEmpresa;
import Model.ItemPrevisao;
import Model.PedidoEmpresaVO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.DoubleConverter;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 */
public class PedidoAssociado extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    private int __placeholder;

    private void _init() throws Exception {
    }
    private static List<ItemPedidoAssociado> listaExclusao = new ArrayList<ItemPedidoAssociado>();
    private DefaultSelectedData associadoSelecionado = new DefaultSelectedData();
    private int aux=0;

    public DefaultSelectedData getAssociadoSelecionado() {
        return associadoSelecionado;
    }

    public void setAssociadoSelecionado(DefaultSelectedData dsd) {
        this.associadoSelecionado = dsd;
    }
    private DefaultSelectionItems associados = new DefaultSelectionItems();

    public DefaultSelectionItems getAssociados() {
        return associados;
    }

    public void setAssociados(DefaultSelectionItems dsi) {
        this.associados = dsi;
    }
    private HtmlInputText campoQuantidadeDisp = new HtmlInputText();

    public HtmlInputText getCampoQuantidadeDisp() {
        return campoQuantidadeDisp;
    }

    public void setCampoQuantidadeDisp(HtmlInputText hit) {
        this.campoQuantidadeDisp = hit;
    }
    private HtmlInputText campoQuantidadePedida = new HtmlInputText();

    public HtmlInputText getCampoQuantidadePedida() {
        return campoQuantidadePedida;
    }

    public void setCampoQuantidadePedida(HtmlInputText hit) {
        this.campoQuantidadePedida = hit;
    }
    private DefaultSelectedData empresaSelecionada = new DefaultSelectedData();

    public DefaultSelectedData getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(DefaultSelectedData dsd) {
        this.empresaSelecionada = dsd;
    }
    private DefaultSelectedData dataSelecionada = new DefaultSelectedData();

    public DefaultSelectedData getDataSelecionada() {
        return dataSelecionada;
    }

    public void setDataSelecionada(DefaultSelectedData dataSelecionada) {
        this.dataSelecionada = dataSelecionada;
    }
    private DefaultSelectionItems empresas = new DefaultSelectionItems();

    public DefaultSelectionItems getEmpresas() {
        return empresas;
    }

    public void setEmpresas(DefaultSelectionItems dsi) {
        this.empresas = dsi;
    }
    private DefaultSelectionItems datas = new DefaultSelectionItems();

    public DefaultSelectionItems getDatas() {
        return datas;
    }

    public void setDatas(DefaultSelectionItems datas) {
        this.datas = datas;
    }
    private HtmlSelectOneMenu comboEmpresa = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboEmpresa() {
        return comboEmpresa;
    }

    public void setComboEmpresa(HtmlSelectOneMenu hsom) {
        this.comboEmpresa = hsom;
    }
    private PopupBean painelPopupSair = new PopupBean();

    public PopupBean getPainelPopupSair() {
        return painelPopupSair;
    }

    public void setPainelPopupSair(PopupBean pb) {
        this.painelPopupSair = pb;
    }
    private HtmlCommandButton botaoSair = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSair() {
        return botaoSair;
    }

    public void setBotaoSair(HtmlCommandButton hcb) {
        this.botaoSair = hcb;
    }
    private HtmlCommandButton botaoLimpar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoLimpar() {
        return botaoLimpar;
    }

    public void setBotaoLimpar(HtmlCommandButton hcb) {
        this.botaoLimpar = hcb;
    }
    private HtmlCommandButton botaoImprimir = new HtmlCommandButton();

    public HtmlCommandButton getBotaoImprimir() {
        return botaoImprimir;
    }

    public void setBotaoImprimir(HtmlCommandButton hcb) {
        this.botaoImprimir = hcb;
    }
    private HtmlCommandButton botaoAlterar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoAlterar() {
        return botaoAlterar;
    }

    public void setBotaoAlterar(HtmlCommandButton hcb) {
        this.botaoAlterar = hcb;
    }
    private HtmlCommandButton botaoConsultar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultar() {
        return botaoConsultar;
    }

    public void setBotaoConsultar(HtmlCommandButton hcb) {
        this.botaoConsultar = hcb;
    }
    private HtmlCommandButton botaoNovo = new HtmlCommandButton();

    public HtmlCommandButton getBotaoNovo() {
        return botaoNovo;
    }

    public void setBotaoNovo(HtmlCommandButton hcb) {
        this.botaoNovo = hcb;
    }
    private PanelPopup painelSair = new PanelPopup();

    public PanelPopup getPainelSair() {
        return painelSair;
    }

    public void setPainelSair(PanelPopup pp) {
        this.painelSair = pp;
    }
    private HtmlCommandButton botaoSairSim = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSairSim() {
        return botaoSairSim;
    }

    public void setBotaoSairSim(HtmlCommandButton hcb) {
        this.botaoSairSim = hcb;
    }
    private HtmlCommandButton botaoSairNao = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSairNao() {
        return botaoSairNao;
    }

    public void setBotaoSairNao(HtmlCommandButton hcb) {
        this.botaoSairNao = hcb;
    }
    private PopupBean painelPopupConsultar = new PopupBean();

    public PopupBean getPainelPopupConsultar() {
        return painelPopupConsultar;
    }

    public void setPainelPopupConsultar(PopupBean pb) {
        this.painelPopupConsultar = pb;
    }
    private HtmlCommandButton botaoConsultaOk = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultaOk() {
        return botaoConsultaOk;
    }

    public void setBotaoConsultaOk(HtmlCommandButton hcb) {
        this.botaoConsultaOk = hcb;
    }
    private HtmlCommandButton botaoConsultaCancelar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultaCancelar() {
        return botaoConsultaCancelar;
    }

    public void setBotaoConsultaCancelar(HtmlCommandButton hcb) {
        this.botaoConsultaCancelar = hcb;
    }
    private PanelPopup painelConsulta = new PanelPopup();

    public PanelPopup getPainelConsulta() {
        return painelConsulta;
    }

    public void setPainelConsulta(PanelPopup pp) {
        this.painelConsulta = pp;
    }
    private PopupBean painelPopupAviso = new PopupBean();

    public PopupBean getPainelPopupAviso() {
        return painelPopupAviso;
    }

    public void setPainelPopupAviso(PopupBean pb) {
        this.painelPopupAviso = pb;
    }
    private HtmlOutputText msgAvisoResultado = new HtmlOutputText();

    public HtmlOutputText getMsgAvisoResultado() {
        return msgAvisoResultado;
    }

    public void setMsgAvisoResultado(HtmlOutputText hot) {
        this.msgAvisoResultado = hot;
    }
    private HtmlOutputText msgAvisoPergunta = new HtmlOutputText();

    public HtmlOutputText getMsgAvisoPergunta() {
        return msgAvisoPergunta;
    }

    public void setMsgAvisoPergunta(HtmlOutputText hot) {
        this.msgAvisoPergunta = hot;
    }
    private HtmlCommandButton botaoAvisoSim = new HtmlCommandButton();

    public HtmlCommandButton getBotaoAvisoSim() {
        return botaoAvisoSim;
    }

    public void setBotaoAvisoSim(HtmlCommandButton hcb) {
        this.botaoAvisoSim = hcb;
    }
    private HtmlCommandButton botaoAvisoNao = new HtmlCommandButton();

    public HtmlCommandButton getBotaoAvisoNao() {
        return botaoAvisoNao;
    }

    public void setBotaoAvisoNao(HtmlCommandButton hcb) {
        this.botaoAvisoNao = hcb;
    }
    private PanelPopup painelAviso = new PanelPopup();

    public PanelPopup getPainelAviso() {
        return painelAviso;
    }

    public void setPainelAviso(PanelPopup pp) {
        this.painelAviso = pp;
    }
    private PopupBean painelPopupMensagem = new PopupBean();

    public PopupBean getPainelPopupMensagem() {
        return painelPopupMensagem;
    }

    public void setPainelPopupMensagem(PopupBean pb) {
        this.painelPopupMensagem = pb;
    }
    private PanelPopup painelMensagem = new PanelPopup();

    public PanelPopup getPainelMensagem() {
        return painelMensagem;
    }

    public void setPainelMensagem(PanelPopup pp) {
        this.painelMensagem = pp;
    }
    private HtmlOutputText msgMensagemResultado = new HtmlOutputText();

    public HtmlOutputText getMsgMensagemResultado() {
        return msgMensagemResultado;
    }

    public void setMsgMensagemResultado(HtmlOutputText hot) {
        this.msgMensagemResultado = hot;
    }
    private HtmlOutputText msgMensagemOperacao = new HtmlOutputText();

    public HtmlOutputText getMsgMensagemOperacao() {
        return msgMensagemOperacao;
    }

    public void setMsgMensagemOperacao(HtmlOutputText hot) {
        this.msgMensagemOperacao = hot;
    }
    private HtmlCommandButton botaoMensagemOk = new HtmlCommandButton();

    public HtmlCommandButton getBotaoMensagemOk() {
        return botaoMensagemOk;
    }

    public void setBotaoMensagemOk(HtmlCommandButton hcb) {
        this.botaoMensagemOk = hcb;
    }
    private DefaultTableDataModel dataTable1Model = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable1Model() {
        return dataTable1Model;
    }

    public void setDataTable1Model(DefaultTableDataModel dtdm) {
        this.dataTable1Model = dtdm;
    }
    private DefaultTableDataModel dataTable2Model = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable2Model() {
        return dataTable2Model;
    }

    public void setDataTable2Model(DefaultTableDataModel dtdm) {
        this.dataTable2Model = dtdm;
    }
    private HtmlDataTable tabelaEmpresa = new HtmlDataTable();

    public HtmlDataTable getTabelaEmpresa() {
        return tabelaEmpresa;
    }

    public void setTabelaEmpresa(HtmlDataTable hdt) {
        this.tabelaEmpresa = hdt;
    }
    private DefaultSelectedData produtoSelecionado = new DefaultSelectedData();

    public DefaultSelectedData getProdutoSelecionado() {
        return produtoSelecionado;
    }

    public void setProdutoSelecionado(DefaultSelectedData dsd) {
        this.produtoSelecionado = dsd;
    }
    private DefaultSelectionItems produtos = new DefaultSelectionItems();

    public DefaultSelectionItems getProdutos() {
        return produtos;
    }

    public void setProdutos(DefaultSelectionItems dsi) {
        this.produtos = dsi;
    }
    private HtmlSelectOneMenu comboProdutos = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboProdutos() {
        return comboProdutos;
    }

    public void setComboProdutos(HtmlSelectOneMenu hsom) {
        this.comboProdutos = hsom;
    }
    private HtmlMessage msgCampoQuantidadePedida = new HtmlMessage();

    public HtmlMessage getMsgCampoQuantidadePedida() {
        return msgCampoQuantidadePedida;
    }

    public void setMsgCampoQuantidadePedida(HtmlMessage hm) {
        this.msgCampoQuantidadePedida = hm;
    }
    private PanelLayout painelConteudo = new PanelLayout();

    public PanelLayout getPainelConteudo() {
        return painelConteudo;
    }

    public void setPainelConteudo(PanelLayout pl) {
        this.painelConteudo = pl;
    }
    private HtmlCommandButton botaoIncluir = new HtmlCommandButton();

    public HtmlCommandButton getBotaoIncluir() {
        return botaoIncluir;
    }

    public void setBotaoIncluir(HtmlCommandButton hcb) {
        this.botaoIncluir = hcb;
    }
    private HtmlMessage msgQuantidadePedida = new HtmlMessage();

    public HtmlMessage getMsgQuantidadePedida() {
        return msgQuantidadePedida;
    }

    public void setMsgQuantidadePedida(HtmlMessage hm) {
        this.msgQuantidadePedida = hm;
    }
    private HtmlCommandButton botaoCadastrar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoCadastrar() {
        return botaoCadastrar;
    }

    public void setBotaoCadastrar(HtmlCommandButton hcb) {
        this.botaoCadastrar = hcb;
    }
    private HtmlDataTable dataTable2 = new HtmlDataTable();

    public HtmlDataTable getDataTable2() {
        return dataTable2;
    }

    public void setDataTable2(HtmlDataTable hdt) {
        this.dataTable2 = hdt;
    }
    private HtmlSelectOneMenu comboDataEntrega = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboDataEntrega() {
        return comboDataEntrega;
    }

    public void setComboDataEntrega(HtmlSelectOneMenu hsom) {
        this.comboDataEntrega = hsom;
    }
    private HtmlPanelGroup painelGeral = new HtmlPanelGroup();

    public HtmlPanelGroup getPainelGeral() {
        return painelGeral;
    }

    public void setPainelGeral(HtmlPanelGroup hpg) {
        this.painelGeral = hpg;
    }
    private DoubleConverter doubleConverter1 = new DoubleConverter();

    public DoubleConverter getDoubleConverter1() {
        return doubleConverter1;
    }

    public void setDoubleConverter1(DoubleConverter dc) {
        this.doubleConverter1 = dc;
    }
    private UIColumn column10 = new UIColumn();

    public UIColumn getColumn10() {
        return column10;
    }

    public void setColumn10(UIColumn uic) {
        this.column10 = uic;
    }
    private javax.faces.component.html.HtmlCommandButton botaoTabelaExcluir = new javax.faces.component.html.HtmlCommandButton();

    public javax.faces.component.html.HtmlCommandButton getBotaoTabelaExcluir() {
        return botaoTabelaExcluir;
    }

    public void setBotaoTabelaExcluir(javax.faces.component.html.HtmlCommandButton hcb) {
        this.botaoTabelaExcluir = hcb;
    }
    private HtmlInputText campoValorUnitario = new HtmlInputText();

    public HtmlInputText getCampoValorUnitario() {
        return campoValorUnitario;
    }

    public void setCampoValorUnitario(HtmlInputText hit) {
        this.campoValorUnitario = hit;
    }
    private HtmlOutputText labelValorUnitario = new HtmlOutputText();

    public HtmlOutputText getLabelValorUnitario() {
        return labelValorUnitario;
    }

    public void setLabelValorUnitario(HtmlOutputText hot) {
        this.labelValorUnitario = hot;
    }
    private UIColumn column6 = new UIColumn();

    public UIColumn getColumn6() {
        return column6;
    }

    public void setColumn6(UIColumn uic) {
        this.column6 = uic;
    }
    private DefaultTableDataModel dataTable1Model1 = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable1Model1() {
        return dataTable1Model1;
    }

    public void setDataTable1Model1(DefaultTableDataModel dtdm) {
        this.dataTable1Model1 = dtdm;
    }
    private UIColumn column8 = new UIColumn();

    public UIColumn getColumn8() {
        return column8;
    }

    public void setColumn8(UIColumn uic) {
        this.column8 = uic;
    }
    private HtmlInputText campoAssociadoSelecionado = new HtmlInputText();

    public HtmlInputText getCampoAssociadoSelecionado() {
        return campoAssociadoSelecionado;
    }

    public void setCampoAssociadoSelecionado(HtmlInputText hit) {
        this.campoAssociadoSelecionado = hit;
    }
    private HtmlDataTable tabelaAssociado = new HtmlDataTable();

    public HtmlDataTable getTabelaAssociado() {
        return tabelaAssociado;
    }

    public void setTabelaAssociado(HtmlDataTable hdt) {
        this.tabelaAssociado = hdt;
    }
    private DefaultSelectedData empresaSelecionadaConsulta = new DefaultSelectedData();

    public DefaultSelectedData getEmpresaSelecionadaConsulta() {
        return empresaSelecionadaConsulta;
    }
    public void setEmpresaSelecionadaConsulta(DefaultSelectedData dsd) {
        this.empresaSelecionadaConsulta = dsd;
    }
    private DefaultSelectionItems empresasConsulta = new DefaultSelectionItems();

    public DefaultSelectionItems getEmpresasConsulta() {
        return empresasConsulta;
    }

    public void setEmpresasConsulta(DefaultSelectionItems dsi) {
        this.empresasConsulta = dsi;
    }
    private DefaultSelectedData dataSelecionadaConsulta = new DefaultSelectedData();

    public DefaultSelectedData getDataSelecionadaConsulta() {
        return dataSelecionadaConsulta;
    }

    public void setDataSelecionadaConsulta(DefaultSelectedData dsd) {
        this.dataSelecionadaConsulta = dsd;
    }
    private DefaultSelectionItems datasConsulta = new DefaultSelectionItems();

    public DefaultSelectionItems getDatasConsulta() {
        return datasConsulta;
    }

    public void setDatasConsulta(DefaultSelectionItems dsi) {
        this.datasConsulta = dsi;
    }
    private HtmlSelectOneMenu comboEmpresaConsulta = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboEmpresaConsulta() {
        return comboEmpresaConsulta;
    }

    public void setComboEmpresaConsulta(HtmlSelectOneMenu hsom) {
        this.comboEmpresaConsulta = hsom;
    }
    private HtmlSelectOneMenu comboDataConsulta = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboDataConsulta() {
        return comboDataConsulta;
    }

    public void setComboDataConsulta(HtmlSelectOneMenu hsom) {
        this.comboDataConsulta = hsom;
    }
    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public PedidoAssociado() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     *
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("PedidoAssociado Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }
        //SelectItem itemEmp = (SelectItem) empresas.get(0);
        //comboEmpresa.setValue(itemEmp.getValue());
        voltaCombo();
        //associados começa vazio
        associados.clear();
        associados.add(new SelectItem("", ""));
        setProdutos(new IceDecorator(ProdutoBO.class).montaCombo());

        limparCampos();

        //combo de produtos sempre ficará desabilitado
        comboProdutos.setDisabled(true);
        painelSair.setRendered(false);
        painelConsulta.setRendered(false);
        painelAviso.setRendered(false);
        painelMensagem.setRendered(false);

    // </editor-fold>
    // Perform application initialization that must complete
    // *after* managed components are initialized
    // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     *ações dos botões do painel de opções
     */
    public String botaoConsultar_action() {
        painelConsulta.setRendered(true);
        empresasConsulta.clear();
        setEmpresasConsulta(new IceDecorator(EmpresaBO.class).montaCombo());
        empresasConsulta.add(0, new SelectItem("0", "Selecione"));
        comboEmpresaConsulta.setValue(0);
        datasConsulta.clear();
        datasConsulta.add(0, new SelectItem("0", "Selecione"));
        comboDataConsulta.setValue(0);
        return null;
    }

    public String botaoSair_action() {

        painelSair.setRendered(true);
        return null;
    }

    /**
     * cadastra os items do pedido associado que cosntam na tabela
     */
    public void voltaCombo(){

        empresas.clear();
        setEmpresas(new IceDecorator(EmpresaBO.class).montaCombo());
        empresas.add( new SelectItem(0, "Selecione"));
        comboEmpresa.setValue(0);
    }
    public String botaoCadastrar_action() {

        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");

        try {
            deletaLista();
            new IceDecorator(PedidoEmpresaBO.class).salvar(pedido);
            List<ItemPrevisao> lista=(List<ItemPrevisao>)dataTable1Model1.getWrappedData();
            for(int i=0;i<lista.size();i++) new IceDecorator(ItemPrevisaoBO.class).salvar(lista.get(i));
            limparCampos();
            desabilitarCampos();
            msgMensagemResultado.setValue("Operação Efetuada Com Sucesso");
            painelMensagem.setRendered(true);
        } catch (Exception e) {

            painelMensagem.setRendered(true);
            msgMensagemResultado.setValue("Erro ao realizar operação");
            msgMensagemOperacao.setValue(e.getMessage());
        }
        return null;
    }

    /**
     *ações dos botões dos pop-ups
     */
    public String botaoCancelar_action() {
        //return null means stay on the same page
        return "menu";
    }

    public String botaoSairSim_action() {
        return "menu";
    }

    public String botaoSairNao_action() {
        painelSair.setRendered(false);
        return null;
    }

    public String botaoConsultaCancelar_action() {
        painelConsulta.setRendered(false);
        return null;
    }

    public String botaoConsultaOk_action()throws Exception {
        List <ItemPedidoEmpresa> itemEmp = (List<ItemPedidoEmpresa>) new IceDecorator(ItemPedidoEmpresaBO.class).buscaObjetoComposto("pedidoEmpresa.codPedidoEmpresa", Integer.parseInt(comboDataConsulta.getValue().toString()));
        List<ItemPedidoAssociado> itensPA;
        PedidoEmpresaVO pedido = (PedidoEmpresaVO) new IceDecorator(PedidoEmpresaBO.class).retornaObjetoCodigo("codPedidoEmpresa",
                    Integer.parseInt(comboDataConsulta.getValue().toString()));

        setBean("PedidoEmpresa", pedido);
        setBean("ItemPedidoEmpresa", itemEmp);
        painelConsulta.setRendered(false);
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        dataTable2Model.setWrappedData(pedido.itemPedidoAssociado());
        comboEmpresa.setValue(comboEmpresaConsulta.getValue());
        datas.clear();
        setDatas(new IceDecorator(PedidoEmpresaBO.class).montaComboData("empresa", "codEmpresa",Integer.parseInt(comboEmpresa.getValue().toString())));
        datas.add( new SelectItem(0, "Selecione"));
        comboDataEntrega.setValue(comboDataConsulta.getValue());
        comboEmpresaConsulta.resetValue();
        
        selecionaProduto();
        return null;
    }

    public String botaoAvisoSim_action() {
        painelAviso.setRendered(false);
        return null;
    }

    public String botaoAvisoNao_action() {
        painelAviso.setRendered(false);
        painelConsulta.setRendered(false);
        return null;
    }

    public String botaoMensagemOk_action() {
        painelMensagem.setRendered(false);
        return null;
    }

    /**
     * botões do painel geral
     */
   
    public String botaoIncluir_action() {
        
        try {            
            //é preciso que o item seja criado novamente pois garante que ele seja considerado um novo elemento quando incluído à lista
            ItemPrevisao itemPrev = (ItemPrevisao) getBean("ItemPrevisao");
            ItemPedidoEmpresa emp = (ItemPedidoEmpresa) getBean("ItemPedidoEmpresa");
            ItemPedidoAssociado itemAssociado = (ItemPedidoAssociado) getBean("ItemPedidoAssociado");
            itemAssociado.setItemPrevisao(itemPrev);
            itemAssociado.getItemPrevisao().getPrevisao().setAssociado(itemPrev.getPrevisao().getAssociado());
            itemAssociado.setQuantidade(Double.parseDouble(campoQuantidadePedida.getValue().toString()));
            itemPrev.setQuantidadeAuxiliar((int) (itemPrev.getQuantidade() - itemAssociado.getQuantidade()));
            emp.setQuantidadeAuxiliar(emp.getQuantidadeAuxiliar() - itemAssociado.getQuantidade());
            itemAssociado.setQuantidadeCaixa(emp.getQuantidade() / emp.getPesoCaixa());
            itemAssociado.setQuantidadeAuxiliar(itemAssociado.getQuantidade());
            addItem(itemAssociado);
            //dataTable1Model1.setWrappedData(null);
            campoValorUnitario.resetValue();
            campoQuantidadePedida.resetValue();
            
            FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ItemPedidoAssociado");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Exclui item da tabela do pedido associado
     * através do item da linha selecionada.
     */
    public String botaoTabelaExcluir_action() throws Exception {

        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        if(pedido.itemPedidoAssociado().get(0).getVenda()==null){

        ItemPedidoAssociado itemassoc=pedido.itemPedidoAssociado().get(dataTable2.getRowIndex());
        listaExclusao.add(pedido.itemPedidoAssociado().get(dataTable2.getRowIndex()));

        ItemPedidoEmpresa pedEmp = pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getItemPedidoEmpresa();
        pedEmp.setQuantidadeAuxiliar(pedEmp.getQuantidadeAuxiliar() + pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getQuantidade());
        pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getItemPrevisao().setQuantidadeAuxiliar((int) (pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getItemPrevisao().getQuantidadeAuxiliar() + pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getQuantidade()));
        setBean("ItemPrevisao", pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()).getItemPrevisao());
        pedEmp.getItemPedidoAssociado().remove(pedido.itemPedidoAssociado().get(dataTable2Model.getRowIndex()));
        pedido.adicionaItemPedido(pedEmp);
        ItemPrevisao item = (ItemPrevisao) getBean("ItemPrevisao");
        item=itemassoc.getItemPrevisao();
        item.setQuantidadeAuxiliar(itemassoc.getQuantidadeAuxiliar());
        List<ItemPrevisao> lista = itemsPorData(pedido.getDataEntrega(),(List<ItemPrevisao>)pedEmp.getProduto().getItemPrevisao());
        dataTable2Model.setWrappedData(pedido.itemPedidoAssociado());
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        dataTable1Model1.setWrappedData(lista);
        setBean("PedidoEmpresa", pedido);
        return null;
        }
        painelMensagem.setRendered(true);
        msgMensagemResultado.setValue("Este pedido ja está relacionado a uma venda, impossivel excluir.");
        return null;
    }

    /**
     * limpa os campos, ainda não está em pleno funcionamento
     */
    public void limparCampos() {

        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("PedidoEmpresa");
        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ItemPedidoAssociado");
        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ItemPrevisao");
        //SelectItem emp = (SelectItem) empresas.get(0);
        //comboEmpresa.setValue(emp.getValue());
        voltaCombo();
        campoValorUnitario.resetValue();
        campoQuantidadePedida.resetValue();

        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());        
        dataTable2Model.setWrappedData(pedido.getItemPedidoEmpresa());
        dataTable1Model1.setWrappedData(pedido.getItemPedidoEmpresa());        
        
        campoAssociadoSelecionado.resetValue();
        campoQuantidadeDisp.resetValue();
        habilitarCampos();
        selecionaEmpresa();
        //comboAssociado.setValue(0);
//        listaExclusao.clear();
    }

    /**
     * métodos para uso dos botões
     */
    public void desabilitarCampos() {
        comboEmpresa.setDisabled(true);
        comboDataEntrega.setDisabled(true);
        campoQuantidadeDisp.setDisabled(true);
        campoQuantidadePedida.setDisabled(true);
        campoValorUnitario.setDisabled(true);
    }

    public void habilitarCampos() {
        comboEmpresa.setDisabled(false);
        comboDataEntrega.setDisabled(false);
        campoQuantidadeDisp.setReadonly(false);
        campoAssociadoSelecionado.setReadonly(false);
        campoQuantidadePedida.setDisabled(false);
        campoValorUnitario.setDisabled(false);
    }

    /**
     * modifica o combo de associados conforme s os itens de produto
     */
    public void modificaAssociado() {

        List<ItemPrevisao> itemPrevisao = new ArrayList<ItemPrevisao>();
        try {
            //busca por item previsao de associado de acordo com numero de produto
            itemPrevisao = new IceDecorator(ItemPrevisaoBO.class).buscaObjetoComposto("produto.codProduto",
                    Integer.parseInt(comboProdutos.getValue().toString()));
            dataTable1Model1.setWrappedData(itemPrevisao);
            habilitarCampos();
        } catch (Exception e) {
        }
    }

    public void modificaCampos() {
        
        try {
            habilitarCampos();
            List<ItemPrevisao> itemPrevisao = (List<ItemPrevisao>) dataTable1Model1.getWrappedData();
            ItemPrevisao ass =(ItemPrevisao) itemPrevisao.get(dataTable1Model1.getRowIndex());
            ItemPrevisao previsao = (ItemPrevisao) getBean("ItemPrevisao");
            System.out.println(previsao.getCodItemPrevisao()+"                       "+ass.getCodItemPrevisao());
            setBean("ItemPrevisao", ass);
            
            campoAssociadoSelecionado.setValue(ass.getPrevisao().getAssociado().getNome());
            campoQuantidadeDisp.setValue(ass.getQuantidadeAuxiliar());
            campoAssociadoSelecionado.setReadonly(true);
            campoQuantidadeDisp.setReadonly(true);
        } catch (Exception e) {
        }
    }

    public void addItem(ItemPedidoAssociado item) {
        ItemPedidoEmpresa itemPedidoEmpresa = (ItemPedidoEmpresa) getBean("ItemPedidoEmpresa");
        itemPedidoEmpresa.adicionarItemAssociado(item);
        item.setItemPedidoEmpresa(itemPedidoEmpresa);
        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        pedido.adicionaItemPedido(itemPedidoEmpresa);
        pedido.itemPedidoAssociado().add(item);
        setBean("PedidoEmpresa", pedido);
        setBean("ItemPedidoEmpresa", itemPedidoEmpresa);
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        dataTable2Model.setWrappedData(pedido.itemPedidoAssociado());
    }
    /**
     * cria uma nova tabela de pedido associado
     */
    public void novaTabela() {
        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        listaExclusao.addAll(pedido.itemPedidoAssociado());
        List<ItemPedidoEmpresa> items = (List<ItemPedidoEmpresa>) pedido.getItemPedidoEmpresa();
        for (int i = 0; i < items.size(); i++) {
            items.get(i).setItemPedidoAssociado(new ArrayList<ItemPedidoAssociado>());
        }
        pedido.setItemPedidoEmpresa(items);
        setBean("PedidoEmpresa", pedido);
    //  dataTable2Model.setWrappedData(pedido.getItemPedidoEmpresa());
    }

    /**
     * O produto é selecionado de acordo com o link da linha de pedido de empresa
     */
    public String selecionaProduto() {
        try {
            FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ItemPedidoEmpresa");
            //garante-se que seja considerado um novo item de pedido empresa
            //cria um novo item de pedido empresa
            ItemPedidoEmpresa emp = new ItemPedidoEmpresa();
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
            List<ItemPedidoEmpresa> itemEmp = (List<ItemPedidoEmpresa>) pedido.getItemPedidoEmpresa();
            //item é o selecionado na tabela
            emp = itemEmp.get(dataTable1Model.getRowIndex());
            //o produto do item fica selecionado no combo do produto
            comboProdutos.setValue(emp.getProduto().getCodProduto());
            setBean("ItemPedidoEmpresa", emp);
            habilitarCampos();
            List<ItemPrevisao> lista = itemsPorData(pedido.getDataEntrega(),(List<ItemPrevisao>)emp.getProduto().getItemPrevisao());
            dataTable1Model1.setWrappedData(lista);
            
        } catch (Exception e) {
        }
        return null;
    }

    //aki filtra se as datas de previsão são válidas para ser entregues para a empresa
    public List<ItemPrevisao> itemsPorData(Date data, List<ItemPrevisao> items){
        List<ItemPrevisao> aux = new ArrayList<ItemPrevisao>();
        for(int i=0; i<items.size(); i++){
            if((items.get(i).getPrevisao().getDataInicio().after(data))||(items.get(i).getPrevisao().getDataFim().before(data))){
                
                items.remove(i);
            }else{
                aux.add(items.get(i));
            }
            
        }
        return aux;
    }

    public void comboEmpresa_processValueChange(ValueChangeEvent vce) {
        /**
         *assegura que o evento seja deste componente para então efetuar a ação de mudança do componente posterior
         */
        dataTable1Model.setWrappedData(null);
        dataTable2Model.setWrappedData(null);
        dataTable1Model1.setWrappedData(null);
        selecionaEmpresa();
        if (vce.getComponent().getId().equals(comboEmpresa.getId()) && !datas.isEmpty()) {
            selecionaDataPedido();
        }
    }

    /**
     * método para preencher o combo de datas conforme número de empresa
     * é chamado pelo process value change do combo empresa
     */
    public void selecionaEmpresa() {
        try {
            datas.clear();
            setDatas(new IceDecorator(PedidoEmpresaBO.class).montaComboData("empresa", "codEmpresa",
                    Integer.parseInt(comboEmpresa.getValue().toString())));
            datas.add( new SelectItem(0, "Selecione"));
            if (!datas.isEmpty()) {
                SelectItem item = (SelectItem) datas.get(0);
                comboDataEntrega.setValue(item.getValue());
                selecionaDataPedido();
            } else {
                dataTable2Model.setWrappedData(null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            datas.clear();
        }
    }

    public void comboDataEntrega_processValueChange(ValueChangeEvent vce) {
        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        if (vce.getComponent().getId().equals(comboDataEntrega.getId())) {
            if (datas.isEmpty()) {
                dataTable1Model.setWrappedData(null);
            } else {
                selecionaDataPedido();
            }
        }
    }

    /**
     * método para ´reencher a tabela de pedido empresa de acordo com a data de entrega e empresa
     */
    public void selecionaDataPedido() {

        try {
            System.out.println("aaaaaaaaaa"+comboDataEntrega.getValue().toString());
            FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("PedidoEmpresa");
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) new IceDecorator(PedidoEmpresaBO.class).retornaObjetoCodigo("codPedidoEmpresa",
                    Integer.parseInt(comboDataEntrega.getValue().toString()));
            setBean("PedidoEmpresa", pedido);
            dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        dataTable2Model.setWrappedData(pedido.itemPedidoAssociado());
        } catch (Exception ex) {
        }
    }

    /**
     * deleta a lista que foi retirada da lista
     */
    public void deletaLista() {
        //a lista que foi retirada da tabela é excluída do banco
        while (!listaExclusao.isEmpty()) {
            try {
                new IceDecorator(ItemPedidoAssociadoBO.class).excluir(listaExclusao.iterator().next());
                listaExclusao.remove(listaExclusao.iterator().next());

            } catch (Exception e) {
                e.printStackTrace();
                listaExclusao.remove(listaExclusao.iterator().next());
            }
        }
    //a quantidade excluída retorna à origem
    // RetornaQuantidade(listaExclusao);
    }

    public String botaoLimpar_action() {
        limparCampos();
        return null;
    }

    public void campoQuantidadePedida_validate(FacesContext context, UIComponent component, Object value) {
        FacesMessage message = new FacesMessage();
        ItemPedidoEmpresa item = (ItemPedidoEmpresa) getBean("ItemPedidoEmpresa");
        ItemPrevisao prev = (ItemPrevisao) getBean("ItemPrevisao");
        System.out.println("quantidades         "+prev.getQuantidadeAuxiliar()+"    "+item.getCodItemPedidoEmpresa()+" "+value.toString());
        if (Double.parseDouble(value.toString()) > prev.getQuantidadeAuxiliar()) {
            message.setSummary("Quantidade Ultrapassa Valores Disponíveis da Previsão");
            throw new ValidatorException(message);
        }
        if (Double.parseDouble(value.toString()) > item.getQuantidadeAuxiliar()) {
            message.setSummary("Quantidade Ultrapassa Valores de Pedido da Empresa");
            throw new ValidatorException(message);
        }
    }

    public String botaoNovo_action() {
        limparCampos();
        //return null means stay on the same page
        return null;
    }

    public void comboEmpresaConsulta_processValueChange(ValueChangeEvent vce) {
         datasConsulta.clear();
        try {
            setDatasConsulta(new IceDecorator(PedidoEmpresaBO.class).montaComboData("empresa", "codEmpresa",
                    Integer.parseInt(comboEmpresaConsulta.getValue().toString())));
            datasConsulta.add(0, new SelectItem("0", "Selecione"));
            comboDataConsulta.setValue(0);
        }catch (Exception ex) {
        }
    }
}
